<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>计算属性与监视</title>
  <script src="vue.js"></script>
</head>
<body>
<div id="root">
  姓：<input type="text" v-model="firstName"><br>
  名: <input type="text" v-model="lastName" ><br>
  全名: <span>{{fullname}}</span>
  全名: <span>{{fullname}}</span>
  全名: <span>{{fullname}}</span>
  全名: <span>{{fullname}}</span>
</div>
</body>
<!--
    计算属性：
        1.定义：要用的属性不存在，要通过已有属性计算得来
        2.原理：底层借助了Object.defineproperty提供的getter和setter
        3.get函数什么时候执行？
              初次读取时执行一次
              依赖的数据发生变化时再次被调用
        4.优势：与methods相比，内部存在缓存机制，效率更高，调试方便
        5.备注：1.计算属性最终会落在vm上，直接作为属性读取使用即可
               2.如果要修改，必须写set函数相应修改，且set中要修改引起计算时依赖的数据发生变化


-->
<script type="text/javascript">
  const vm = new Vue({
    el:'#root',
    data:{
      firstName:'张',
      lastName:'三',
    },
    computed:{
      fullname:{
        get(){
          console.log('get调用了')
          return this.firstName+'-'+this.lastName //此处this为vm
        },
        set(value){
          console.log('set',value)
          let arr = value.split('-')
          this.firstName = arr[0]
          this.lastName = arr[1]
        }
      }
    }
  })
</script>
</html>